/*
  数字消除
  题目描述
    小 A 和小 B 在进行数字消除的游戏，规则是这样的：
      对任意正整数 n，每次减去最小质因数即为一次消除，重复消除直到 n 为 0，
    小 A 想通过编程快速计算 n 的消除次数。
    最小质因数：一个数的质数因数里最小的那个数就叫做最小质因数，
               例如，数字 24 = 2 × 2 × 2 × 3，其中 2 是最小的质因数。
  输入描述
    输入一行一个正整数 n。
  输出描述
    输出一个整数，表示消除的次数。
  样例1
    输入
      9
    输出
      4
  样例2
    输入
      2
    输出
      1
  提示
   【样例1解释】
      n=9 计算过程如下：
      9-3=6
      6-2=4
      4-2=2
      2-2=0
      一共 4 次消除
   【数据范围】
      对 60% 的数据保证：2 <= n <= 10^6；
      对 100% 的数据保证：2 <= n <= 10^10。
*/

#include <iostream>

using namespace std;

// 判断输入参数是否为质数
bool a (long long n) {
    for (long long i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}

// 求奇合数 n 的最小质因数 (说明: 奇合数的最小因数一定是质数)
int b (long long n) {
    for (int i = 2; i <= n; i++) {
        if (n % i == 0) {
            return i;
        }
    }

    return 0; // 注意: 这个分支永远也不会走到!
}

int main() {
    long long n;
    long long x = 0;

    cin >> n;

    // 算法思路说明:
    //   如果 n 是偶数, n 的最小质因数是 2, 消除的次数为 n / 2;
    //   否则(n 是奇数),
    //     如果 n 是质数, 则消除的次数为 1;
    //     否则(n 是奇合数), 第一次消除减的最小质因数一定为奇数, 执行第一次减法后一定得到一个偶数, 假定为 k;
    //                      而偶数 k 需要的消除次数为 k / 2;
    //                      所以消除的次数为 k / 2 + 1;
    if (n % 2 == 0) { // n 是偶数
        cout << n / 2;
    } else {          // n 是奇数
        if (a(n)) { // n 是奇质数
            cout << 1;
        } else {    // n 是奇合数
            cout << 1 + (n - b(n))/2;
        }
    }

    return 0;
}